
There are two main stages of my test plan.  During the first stage, the development stage, I created a test before adding any functionality and committed the test along with the changes that added the functionality.  I also added test cases that should fail when I recognized that cases that should fail.  In the next stage I spent more time trying to correlate the tests with the rules.  Footnotes have been added to the language reference manual that point to the corresponding test cases.

No code coverage was used.  The test suite could be significantly improved if code coverage was assured.  If it was used, it may also benefit the manual by making sure that every case or virtually every case was unambiguously specified in the language.

The test suite is in the Appendix \ref{chpt:testsuite}.  

The automation was achieved by a script called testall.sh, which is a modified version of Dr. Stephen Edwards' script of the same name.

There are two types of tests, ``success'' tests and ``failure'' tests.  The former makes up the majority of the tests.  These tests should run successfully and the output should match with the tests predefined output (with extension ``.out'').  The failure tests should fail and are successful when the program throws an exception.  Both test cases have an extension ``.args'' which define the file for the input and output parameters.

The entire test suite can be tested with the ``make test'' command in the src directory.

